#pragma once

#include <string>
#include <vector>

struct CameraBaseConfig {
    bool enable;
    std::string deviceName;
    int width;
    int height;
    std::string format;
    int fps;
};

struct EncoderConfig {
    int channel; // 编码通道，参考 CBBEncoderChannelE_t
    int width;
    int height;
    std::string in_format;  // 输入格式 参考 CbbCameraFormatsE_t
    std::string out_format; // 编码后输出格式 参考 CbbCameraFormatsE_t
    int rotation;           // 旋转角度 0-0 1-90 2-180 3-270
    int qc;
};

struct StoreConfig {
    int enable;
    int pos;              // 图片索引位置
    std::string filePath; // 储存文件路径
};
enum Protocol {
    UDP = 0,
    LOCAL_SOCKET = 1
};
struct TransportConfig {
    /* data */
    int enable;
    int protocol;        // 0 udp 1 socket
    std::string address; // 可以是 IP 地址或本地 socket 路径
    int port;
    int direction; // CameraTranDirectionE_t  0 app 1 slam
};

// 单个摄像头配置结构
struct CameraConfig {
    CameraBaseConfig baseConfig;
    std::vector<EncoderConfig> encoderConfigs;
    StoreConfig storeConfig;
    std::vector<TransportConfig> transportConfigs;
};

// 多摄像头配置结构
struct MultiCameraConfig {
    std::vector<CameraConfig> cameras;
};

struct NetworkFrameData {
    std::vector<uint8_t> data;
    int64_t unixTimestamp; // Unix时间戳，毫秒级
};

struct FileFrameData {
    std::vector<uint8_t> data;
    std::string formattedTime;
};